KinematicBody2D Movement
はじめに
KinematicBody2D, Static, Rigid などの物理オブジェクトは、
shapeを子供に持っていないと正しく動作しない(警告が出る)
なので、CollisionShape2Dを追加しておく
move_and_slide/colide()
move_and_clllide()
何かにあたったら、止まる
衝突した相手を取得する
deltaを自動的には使わない
移動速度にdeltaをかける
move_and_slide()
衝突しても、衝突物のない方向への速度は止まらず、滑る
床、壁、天井を検知できる
壁を這い回るように動ける
床を滑る
移動するときにdeltaを自動で検出する
Vector2D を速度として pxcel/sec で動く
どちらを使うべき?
多くのケースで、move_and_slide()のほうが一般的で、少ないコードでかける。
colideを使ってもslideのような移動はかけるが、記述が多くなる。
(Vector2D.slide を使う)
Playerの移動
and / not / or : 論理演算子
left/rightの両方が押されている場合を考慮して、入力の優先度を除去する
同時押しされていたら止まる
少しコードが多いけど
code: python
extends KinematicBody2D
const SPEED = 500
var motion = Vector2(0, 0)
# Inputはグローバルなシングルトンオブジェクトで、どのスクリプトからもアクセスできる
func _physics_process(delta):
if Input.is_action_pressed("left") and not Input.is_action_pressed("right"):
motion.x = -SPEED
elif Input.is_action_pressed("right") and not Input.is_action_pressed("left"):
motion.x = SPEED
else:
# 滑る動き
motion.x *= 0.95
move_and_slide(motion)